<?php
/**
 * 菜单menu
 * @author liudaiming@xywy.com
 * @version 2014-12-15
 */
class AdminMenuModel extends Model
{
	// array(验证字段,验证规则,错误提示,验证条件,附加规则,验证时间),附加规则决定验证规则的类型
	protected $_validate = array(
			array('name', 'require', '请填写菜单名称'),
			array('m', 'require', '请填写分组名称'),
			array('c', 'require', '请填写模块名称'),
			array('c', 'require', '请填写方法名称'),
		);
	
	/**
	 * 得到一个小组的信息
	 *
	 * @param $group_id int 小组ID
	 * @param $field string
	 */
	public function get_one($menu_id, $field = '')
	{
		$menu_id = (int)$menu_id;
		if($menu_id <= 0)
		{
			return false;
		}
		/* import("@.ORG.Memcached");
		$memcache = new Memcached();
		$result = $memcache->get("menu:$menu_id");
		if(empty($result) || C('APP_DEBUG'))
		{ */
			$result = $this->where("id = $menu_id")->find();
		/* 	if(!empty($result))
			{
				$memcache->set("menu:$menu_id", $result);
			}
		} */
		if($field !== '')
		{
			return isset($result[$field]) ? $result[$field] : '';
		}
		else
		{
			return $result;
		}
	}

	/**
	 * 菜单列表
	 *
	 * @param $type 返回类型
	 * @return unknown
	 */
	public function get_sysmenu_list($type = 'line')
	{
		$res = $this->field('`id`,`parentid`,`name`,`m`,`c`,`a`')->where("status = '1'")->order('sort ASC')->select();
// 		dump(session('yima_role'));
		// 权限检查
		if(session('yima_role') === 1 || $type == 'all') // 如果是超级管理员或者取得所有菜单时
		{
			return $this->get_type_tree($res, $type);
		}
		$array = array();
		$role_obj = D('AdminPriv');
		foreach($res as $v)
		{
			$ctrl_args = array('m'=>$v['m'], 'c'=>$v['c'], 'a'=>$v['a'], 'role_id'=>session('yima_role'));
			$r = $role_obj->get_priv_one($ctrl_args);
			if($r)
			{
				$array[] = $v;
			}
		}
		return $this->get_type_tree($array, $type);
	}

	/**
	 * 按照类型取得菜单
	 *
	 * @param $array 所有菜单数据
	 * @param $type 返回类型
	 * @return unknown
	 */
	private function get_type_tree($array, $type)
	{
		$tree = new Tree();
		if(false === $tree->init($array))
		{
			return false;
		}
		switch($type)
		{
			case 'tree' :
				return $tree->get_child_tree(0);
				break;
			default :
				return $tree->get_line(0);
				break;
		}
	}

	/**
	 * 取得所有菜单列表
	 */
	public function get_menu_list()
	{
		$res = $this->field('`id`,`parentid`,`name`,`m`,`c`,`a`,`sort`,`status`')->order('sort ASC')->select();
		return $res;
	}

	/**
	 * 按菜单id 返回单条数据
	 *
	 * @param $id 菜单编号
	 * @return unknown
	 */
	public function get_menu_by_id($id)
	{
		$id = (int)$id;
		if($id === 0)
		{
			return array();
		}
		$res = $this->field('`id`,`parentid`,`name`,`m`,`c`,`a`')->where("status = '1' AND id = $id")->find();
		return $res;
	}

	/**
	 * 取得该父类下的子菜单
	 *
	 * @param $parentid int
	 * @return array
	 */
	public function get_menu_child($parentid)
	{
		$parentid = (int)$parentid;
		$res = $this->field('`id`,`parentid`,`name`,`m`,`c`,`a`')->where("status = '1' AND parentid=$parentid")->order('sort ASC')->select();
		return $res;
	}

	/**
	 * 取父类模块
	 *
	 * @return boolean | array
	 */
	public function get_menu_parent()
	{
		$res = $this->field('id,parentid,name,m,c,a')->where("status = '1' AND parentid=0")->select();
		return $res;
	}
}